﻿using System;

namespace ClassLibrary
{
    /// <summary>
    /// Classe base para as páginas do sistema que serão controladas
    /// </summary>
    public class PaginaBase : System.Web.UI.Page
    {
        /// <summary>
        /// Método executado ao carregar a página responsável pela validação das permissões da própria página e seus controles
        /// </summary>
        /// <remarks>
        /// A chamada base.OnLoad() no final é necessária para que o método Page_Load da página especializada seja invocado
        /// no caso da permissão de acesso à página ser concedida
        /// </remarks>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e)
        {
            //verifica se o usuário possui permissão para acessar a página
            try
            {
                new Autorizacao(this).Verificar();
            }
            //Se o usuário não possuir permissão para acessar a página, uma exceção do tipo AccessDeniedExceptio é retornada e o 
            // método OnAccessDenied é chamado para realizar o tratamento de erro padrão, que é repassar a exceção
            catch(AcessoNegadoException)
            {
                OnAcessoNegado();
            }

            base.OnLoad(e);
        }

        /// <summary>
        /// Por padrão, no caso do usuário não ter permissão de acesso à página, uma exceção é retornada.
        /// </summary>
        /// <remarks>
        /// É possível sobreescrever este método na classe da página especializada para realizar um tratamento específico.
        /// </remarks>
        protected virtual void OnAcessoNegado()
        {
            throw new AcessoNegadoException();
        }
    }
}